home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Workbench Add-On
/
Workbench Add-On - Volume 1.iso
/
Dev
/
Amiga-E
/
E_v3.2a
/
Src
/
Guide
/
set.e
< prev
next >
Wrap
Text File
|
1994-12-14
|
2KB
|
81 lines
OPT MODULE -> Define class 'set' in a module
OPT EXPORT -> Export everything
/* The data for the class */
OBJECT set PRIVATE -> Make all the data private
elements:PTR TO LONG
maxsize, size
ENDOBJECT
/* Creation constructor */
/* Minimum size of 1, maximum 100000, default 100 */
PROC create(sz=100) OF set
DEF p:PTR TO LONG
IF (sz>0) AND (sz<100000) -> Check size
self.maxsize:=sz
ELSE
self.maxsize:=100
ENDIF
self.elements:=NEW p[self.maxsize]
ENDPROC
/* Copy constructor */
PROC copy(oldset:PTR TO set) OF set
DEF i
self.create(oldset.maxsize) -> Call create method!
FOR i:=0 TO oldset.size-1 -> Copy elements
self.elements[i]:=oldset.elements[i]
ENDFOR
self.size:=oldset.size
ENDPROC
/* Destructor */
PROC end() OF set
DEF p:PTR TO LONG
IF self.maxsize<>0 -> Check that it was allocated
p:=self.elements
END p[self.maxsize]
ENDIF
ENDPROC
/* Add an element */
PROC add(x) OF set
IF self.member(x)=FALSE -> Is it new? (Call member method!)
IF self.size=self.maxsize
Raise("full") -> The set is already full
ELSE
self.elements[self.size]:=x
self.size:=self.size+1
ENDIF
ENDIF
ENDPROC
/* Test for membership */
PROC member(x) OF set
DEF i
FOR i:=0 TO self.size-1
IF self.elements[i]=x THEN RETURN TRUE
ENDFOR
ENDPROC FALSE
/* Test for emptiness */
PROC empty() OF set IS self.size=0
/* Union (add) another set */
PROC union(other:PTR TO set) OF set
DEF i
FOR i:=0 TO other.size-1
self.add(other.elements[i]) -> Call add method!
ENDFOR
ENDPROC
/* Print out the contents */
PROC print() OF set
DEF i
WriteF('{ ')
FOR i:=0 TO self.size-1
WriteF('\d ', self.elements[i])
ENDFOR
WriteF('}')
ENDPROC